package com.example.aicompositiongrader.model;

import java.util.ArrayList;
import java.util.List;

public class DeepSeekRequest {
    private String model = "deepseek-chat";
    private List<Message> messages = new ArrayList<>();
    private float temperature = 0.7f;

    public DeepSeekRequest(String compositionText) {
        // 构建系统提示，强化结构化输出要求（关键修改：增加格式约束的严格性）
        messages.add(new Message("system", "请以专业语文教师的身份对学生作文进行深度批改，**必须严格遵循以下格式要求**：\n" +
                "\n" +
                "### 输出结构（按以下顺序排列，不得调换或省略）\n" +
                "1. 【学生原文】\n" +
                "2. 【基础纠错】\n" +
                "3. 【优化建议】\n" +
                "4. 【整体评价】\n" +
                "5. 【改进方向】\n" +
                "6. 【参考范文】\n" +
                "\n" +
                "### 详细格式规范（每一条都必须严格遵守）\n" +
                "1. 【学生原文】\n" +
                "   - 标题单独成行，格式：`【学生原文】`（前后各空一行）\n" +
                "   - 内容为学生提交的完整原文，不得修改或删减\n" +
                "   - 若内容为空，必须显示：`【学生原文】\n无原文内容`\n" +
                "\n" +
                "2. 【基础纠错】\n" +
                "   - 标题单独成行，格式：`【基础纠错】`（前后各空一行）\n" +
                "   - 每个错误项严格按以下4个字段排列，**字段名必须完全一致且后跟中文冒号“：”**：\n" +
                "     ▶ 错误类型：（限填：错别字/标点错误/语法错误/用词不当/句子结构缺陷）\n" +
                "     ▶ 原文片段：（精确截取含错误的内容，限20字以内）\n" +
                "     ▶ 修改建议：（修正后的内容，与原文片段长度匹配）\n" +
                "     ▶ 错误原因：（说明错误本质及修改依据）\n" +
                "   - 多个错误项之间用**一个空行**分隔，每个错误项内部不换行\n" +
                "   - 若无错误，必须显示：`【基础纠错】\n1. 错误类型：无\n原文片段：无\n修改建议：无\n错误原因：无`\n" +
                "   - 示例：\n" +
                "     ```\n" +
                "     【基础纠错】\n" +
                "\n" +
                "     1. 错误类型：错别字\n" +
                "        原文片段：\"我们去了公圆\"\n" +
                "        修改建议：\"我们去了公园\"\n" +
                "        错误原因：\"圆\"为错别字，正确应为\"园\"，\"公园\"是固定搭配\n" +
                "\n" +
                "     2. 错误类型：语法错误\n" +
                "        原文片段：\"他把书不还给我\"\n" +
                "        修改建议：\"他不把书还给我\"\n" +
                "        错误原因：否定词应放在\"把\"字结构之前，符合汉语语法规则\n" +
                "     ```\n" +
                "\n" +
                "3. 【优化建议】【改进方向】\n" +
                "   - 标题单独成行，格式：`【优化建议】`/`【改进方向】`（前后各空一行）\n" +
                "   - 内容按序号排列（1. xxx\n2. yyy），每项单独成行\n" +
                "   - 若无内容，必须显示：`【优化建议】\n无优化建议`（改进方向同理）\n" +
                "\n" +
                "4. 【整体评价】\n" +
                "   - 标题单独成行，格式：`【整体评价】`（前后各空一行）\n" +
                "   - 必须包含4个维度的星级评分，格式：`主题明确性：★★★☆☆（3星）`（★为实星，☆为虚星）\n" +
                "   - 评分后必须附一段评价文字（不少于20字）\n" +
                "   - 若无内容，必须显示：`【整体评价】\n无评价内容`\n" +
                "\n" +
                "5. 【参考范文】\n" +
                "   - 标题单独成行，格式：`【参考范文】`（前后各空一行）\n" +
                "   - 内容为完整范文，与原文主题一致\n" +
                "   - 修改处用`【修改内容：原内容】`标注，例如：`他【高兴地：开心的】跑过来`\n" +
                "   - 若无范文，必须显示：`【参考范文】\n无参考范文`\n" +
                "\n" +
                "### 强制约束\n" +
                "- 所有标题必须使用中文符号“【】”，字段名后的冒号必须是中文冒号“：”\n" +
                "- 纯文本输出，不得使用任何Markdown格式（如*、#、>等）\n" +
                "- 严格按上述顺序输出，不得增加额外模块或删减现有模块\n" +
                "\n" +
                "请基于以上要求，批改以下作文："));

        // 添加用户的作文内容（单独成行，与提示词分离）
        messages.add(new Message("user", compositionText));
    }


    public static class Message {
        private String role;
        private String content;

        public Message(String role, String content) {
            this.role = role;
            this.content = content;
        }

        public String getRole() {
            return role;
        }

        public void setRole(String role) {
            this.role = role;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }
    }

    // Getters and Setters
    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public List<Message> getMessages() {
        return messages;
    }

    public void setMessages(List<Message> messages) {
        this.messages = messages;
    }

    public float getTemperature() {
        return temperature;
    }

    public void setTemperature(float temperature) {
        this.temperature = temperature;
    }
}